package day240110

import "fmt"

// 地址  , 指针
// 重建非引用变量，都会新开辟内存地址。
// 指针一般在 值传递  时使用
func P地址和指针() {

	//重新创建一个非引用型变量，（即使是把已有变量直接复制给新变量）也会新开辟内存地址
	a := 1
	fmt.Println(&a) // &a 输出a地址

	a = 2
	fmt.Println(&a) // 赋值后，地址不变
	fmt.Println(a)

	b := a //开辟新内存地址, a地址不会变
	b = 3
	fmt.Println(&b, &a) //b的地址和a的不同
	fmt.Println(b, a)   // 3 2

	//指针
	var c *int     //指针不开辟新空间,但是指针 有新地址
	fmt.Println(c) //<nil> 空指针

	d := 123
	c = &d
	fmt.Println(&d, c, &c) //d地址和指针指向地址一样的，但是指针自己有独立地址

	//c = 123   //报错，指针不能赋值数字
	//c = d 	//报错，指针不能赋值数字

	*c = 456 //*c 相当于 &d ，直接操作 &d

	fmt.Println("&d,d=", &d, d)

	fmt.Println("地址和指针结束")
}
